{"componentChunkName":"component---src-templates-blog-page-index-tsx","path":"/token-erc20/","result":{"data":{"mdx":{"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"layout\": \"BlogPage\",\n  \"title\": \"Criando nosso primeiro Token ERC20\",\n  \"description\": \"Nesse artigo iremos aprender a como criar nosso primeiro Token ERC20 e uma aplicação que irá interagir com nosso token.\",\n  \"image\": \"capa.jpg\",\n  \"tags\": [\"Intermediário\", \"Avançado\", \"Aplicações\"],\n  \"author\": [\"Matheus\"],\n  \"publishedAt\": \"04/06/2022\",\n  \"modifiedAt\": \"20220604\",\n  \"suburl\": \"token-erc20/\"\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"Nesse artigo iremos aprender a criar nosso primeiro Token ERC20 e uma aplica\\xE7\\xE3o que ir\\xE1 interagir com nosso token.\"), mdx(\"h2\", {\n    \"id\": \"token-erc20\"\n  }, \"Token ERC20\"), mdx(\"p\", null, \"Qualquer contrato que siga o \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://eips.ethereum.org/EIPS/eip-20\",\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"padr\\xE3o ERC20\"), \" \\xE9 considerado um token ERC20.\"), mdx(\"p\", null, \"Os tokens \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"ERC20\"), \" fornecem funcionalidades para\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"transferir tokens\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"permitir que outros transfiram tokens em nome do titular do token\")), mdx(\"p\", null, \"Um exemplo de interface para o token \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"ERC20\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-js\"\n  }, \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.13;\\n\\n// Link do arquivo padr\\xE3o da interface IERC20\\n// https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v3.0.0/contracts/token/ERC20/IERC20.sol\\ninterface IERC20 {\\n    function totalSupply() external view returns (uint);\\n\\n    function balanceOf(address account) external view returns (uint);\\n\\n    function transfer(address recipient, uint amount) external returns (bool);\\n\\n    function allowance(address owner, address spender) external view returns (uint);\\n\\n    function approve(address spender, uint amount) external returns (bool);\\n\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint amount\\n    ) external returns (bool);\\n\\n    event Transfer(address indexed from, address indexed to, uint value);\\n    event Approval(address indexed owner, address indexed spender, uint value);\\n}\\n\")), mdx(\"br\", null), mdx(\"p\", null, \"Exemplo do contrato do token \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"ERC20\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-js\"\n  }, \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.13;\\n\\nimport \\\"./IERC20.sol\\\";\\n\\n// Cria\\xE7\\xE3o do contrato do token PRATICA\\ncontract ERC20 is IERC20 {\\n    uint public totalSupply;\\n    mapping(address => uint) public balanceOf;\\n    mapping(address => mapping(address => uint)) public allowance;\\n    string public name = \\\"Solidity na Pr\\xE1tica\\\";\\n    string public symbol = \\\"PRATICA\\\";\\n    uint8 public decimals = 18;\\n\\n    // Fun\\xE7\\xE3o respons\\xE1vel por transferir os tokens da carteira\\n    // que chamou a fun\\xE7\\xE3o para a carteira recipient\\n    function transfer(address recipient, uint amount) external returns (bool) {\\n        balanceOf[msg.sender] -= amount;\\n        balanceOf[recipient] += amount;\\n        emit Transfer(msg.sender, recipient, amount);\\n        return true;\\n    }\\n\\n    // Fun\\xE7\\xE3o respons\\xE1vel por aprovar que o contrato interaja com\\n    // o saldo da sua carteira\\n    function approve(address spender, uint amount) external returns (bool) {\\n        allowance[msg.sender][spender] = amount;\\n        emit Approval(msg.sender, spender, amount);\\n        return true;\\n    }\\n\\n    // Fun\\xE7\\xE3o respons\\xE1vel por transferir tokens de uma carteira sender\\n    // para a carteira recipient\\n    function transferFrom(\\n        address sender,\\n        address recipient,\\n        uint amount\\n    ) external returns (bool) {\\n        allowance[sender][msg.sender] -= amount;\\n        balanceOf[sender] -= amount;\\n        balanceOf[recipient] += amount;\\n        emit Transfer(sender, recipient, amount);\\n        return true;\\n    }\\n\\n    // Fun\\xE7\\xE3o respons\\xE1vel por mintar/criar mais tokens PRATICA\\n    // e enviar para a carteira de quem chamou a fun\\xE7\\xE3o\\n    function mint(uint amount) external {\\n        balanceOf[msg.sender] += amount;\\n        totalSupply += amount;\\n        emit Transfer(address(0), msg.sender, amount);\\n    }\\n\\n    // Fun\\xE7\\xE3o respons\\xE1vel por queimar o token\\n    function burn(uint amount) external {\\n        balanceOf[msg.sender] -= amount;\\n        totalSupply -= amount;\\n        emit Transfer(msg.sender, address(0), amount);\\n    }\\n}\\n\")), mdx(\"br\", null), mdx(\"h2\", {\n    \"id\": \"criando-seu-próprio-token-erc20\"\n  }, \"Criando seu pr\\xF3prio token ERC20\"), mdx(\"p\", null, \"Para facilitar e padronizar a cria\\xE7\\xE3o de tokens \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"ERC20\"), \", voc\\xEA pode utilizar a ferramenta \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://wizard.openzeppelin.com/\",\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"OpenZeppelin\"), \",\\nreposit\\xF3rio do \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://github.com/OpenZeppelin/openzeppelin-contracts\",\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"OpenZeppelin no GitHub\"), \" com v\\xE1rios exemplos de contratos \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"ERC20\"), \" e \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"ERC721\"), \".\\nVoc\\xEA pode ler a documenta\\xE7\\xE3o completa sobre tokens \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"ERC20\"), \" \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://docs.openzeppelin.com/contracts/4.x/erc20\",\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"aqui\"), \". \"), mdx(\"p\", null, \"Atrav\\xE9s do OpenZeppelin, voc\\xEA cria seu token de forma automatizada passando apenas alguns par\\xE2metros como\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"name\"), \" - nome do token\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"symbol\"), \" - s\\xEDmbolo do seu token\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"premint\"), \" - total de tokens que ser\\xE3o criados inicialmente\")), mdx(\"p\", null, \"Entre outras op\\xE7\\xF5es, acesse o site da OpenZeppelin e confira a ferramenta completa.\"), mdx(\"p\", null, \"Abaixo, um simples exemplo de token \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"ERC20\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-js\"\n  }, \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.13;\\n\\nimport \\\"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.0.0/contracts/token/ERC20/ERC20.sol\\\";\\n\\n// Para nomear seu contrato, altere MyToken para o nome desejado\\ncontract MyToken is ERC20 {\\n\\n    // Criaremos 1000 tokens\\n    uint tokenAmount = 1000;\\n    constructor(string memory name, string memory symbol) ERC20(name, symbol) {\\n        // Mint 1000 tokens para carteira msg.sender\\n        // Semelhante como\\n        // 1 dollar = 100 cents\\n        // 1 token = 1 * (10 ** decimals)\\n        _mint(msg.sender, tokenAmount * 10**uint(decimals()));\\n        // Se voc\\xEA quizesse por exemplo, criar 1 milh\\xE3o de tokens\\n        // Bastaria trocar o valor do tokenAmount para 1000000\\n    }\\n}\\n\")), mdx(\"br\", null), mdx(\"h2\", {\n    \"id\": \"contrato-para-trocar-tokens-swap-de-tokens\"\n  }, \"Contrato para trocar tokens (Swap de Tokens)\"), mdx(\"p\", null, \"Aqui est\\xE1 um exemplo de contrato \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"TokenSwap\"), \", onde podemos trocar um token ERC20 por outro, onde poder\\xEDamos aplicar por exemplo, em uma dapp de jogo NFT, onde\\no jogador poder\\xE1 trocar um token X pelo token Y do jogo, exemplo realizar a troca do token \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"BNB\"), \" da BSC pelo nosso token \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"PRATICA\"), \".\"), mdx(\"p\", null, \"Este contrato trocar\\xE1 tokens chamando\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-js\"\n  }, \"transferFrom(address sender, address recipient, uint256 amount)\\n\")), mdx(\"p\", null, \"que realizar\\xE1 a transfer\\xEAncia da quantidade passada pelo par\\xE2metro \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"amount\"), \" do token \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"PRATICA\"), \" do endere\\xE7o \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"sender\"), \" para o endere\\xE7o \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"recipient\"), \".\"), mdx(\"p\", null, \"Para que a fun\\xE7\\xE3o \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"transferFrom\"), \" tenha sucesso, o endere\\xE7o \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"sender\"), \" deve\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"ter saldo \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"amount\"), \" maior do que est\\xE1 enviando na transa\\xE7\\xE3o, contabilizando os valores de taxa de gas\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"autorizar o \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"TokenSwap\"), \" a interagir e retirar a quantidade de \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"amount\"), \" do token de sua carteira atrav\\xE9s da fun\\xE7\\xE3o \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"approve\"))), mdx(\"p\", null, \"antes de \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"TokenSwap\"), \" chamar a fun\\xE7\\xE3o \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"transferFrom\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-js\"\n  }, \"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.13;\\n\\n// Importa a interface IERC20 atrav\\xE9s do reposit\\xF3rio GitHub do OpenZeppelin\\nimport \\\"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.0.0/contracts/token/ERC20/IERC20.sol\\\";\\n\\n/*\\nComo funciona a troca de tokens\\n\\n1. Alice tem 100 tokens da AliceCoin, que \\xE9 um token ERC20.\\n2. Bob tem 100 tokens da BobCoin, que tamb\\xE9m \\xE9 um token ERC20.\\n3. Alice e Bob querem trocar 10 AliceCoin por 20 BobCoin.\\n4. Alice ou Bob implantam o TokenSwap\\n5. Alice aprova o TokenSwap para retirar 10 tokens da AliceCoin\\n6. Bob aprova o TokenSwap para retirar 20 tokens do BobCoin\\n7. Alice ou Bob chama TokenSwap.swap()\\n8. Alice e Bob negociaram tokens com sucesso.\\n*/\\n\\ncontract TokenSwap {\\n    IERC20 public token1;\\n    address public owner1;\\n    uint public amount1;\\n    IERC20 public token2;\\n    address public owner2;\\n    uint public amount2;\\n\\n    // Construtor do TokenSwap\\n    constructor(\\n        address _token1,\\n        address _owner1,\\n        uint _amount1,\\n        address _token2,\\n        address _owner2,\\n        uint _amount2\\n    ) {\\n        token1 = IERC20(_token1);\\n        owner1 = _owner1;\\n        amount1 = _amount1;\\n        token2 = IERC20(_token2);\\n        owner2 = _owner2;\\n        amount2 = _amount2;\\n    }\\n\\n    // Realiza as valida\\xE7\\xF5es necess\\xE1rias para que a troca seja realizada\\n    // com sucesso\\n    function swap() public {\\n        require(msg.sender == owner1 || msg.sender == owner2, \\\"N\\xE3o autorizado\\\");\\n        require(\\n            token1.allowance(owner1, address(this)) >= amount1,\\n            \\\"Token 1 - permiss\\xE3o muito baixa\\\"\\n        );\\n        require(\\n            token2.allowance(owner2, address(this)) >= amount2,\\n            \\\"Token 2 - permiss\\xE3o muito baixa\\\"\\n        );\\n\\n        _safeTransferFrom(token1, owner1, owner2, amount1);\\n        _safeTransferFrom(token2, owner2, owner1, amount2);\\n    }\\n\\n    // Realiza a transfer\\xEAncia segura do endere\\xE7o sender para \\n    // o endere\\xE7o recipient na quantidade de amount\\n    function _safeTransferFrom(\\n        IERC20 token,\\n        address sender,\\n        address recipient,\\n        uint amount\\n    ) private {\\n        bool sent = token.transferFrom(sender, recipient, amount);\\n        require(sent, \\\"Falha na transfer\\xEAncia do token\\\");\\n    }\\n}\\n\")), mdx(\"br\", null), mdx(\"h3\", {\n    \"id\": \"testar-no-remix\"\n  }, \"Testar no \", mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"https://remix.ethereum.org/\",\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"Remix\")), mdx(\"br\", null), mdx(\"br\", null));\n}\n;\nMDXContent.isMDXComponent = true;","frontmatter":{"title":"Criando nosso primeiro Token ERC20","description":"Nesse artigo iremos aprender a como criar nosso primeiro Token ERC20 e uma aplicação que irá interagir com nosso token.","image":{"childImageSharp":{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAANABQDASIAAhEBAxEB/8QAGAAAAgMAAAAAAAAAAAAAAAAAAAQBAgP/xAAUAQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIQAxAAAAFxjYJLB//EABoQAAICAwAAAAAAAAAAAAAAAAECERIEECH/2gAIAQEAAQUCUxkOXCrNaie6/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAwEBPwE//8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPwE//8QAHBAAAQUAAwAAAAAAAAAAAAAAAQACETFRAxAS/9oACAEBAAY/AiDyEudMDES2XHEJteheq+v/xAAcEAADAAEFAAAAAAAAAAAAAAAAAREhEDFBYdH/2gAIAQEAAT8hpSEOyEGBwxRmYsjKHahLqEq86f/aAAwDAQACAAMAAAAQkM//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/ED//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/ED//xAAdEAEBAAEEAwAAAAAAAAAAAAABEQAQIUFhgZHR/9oACAEBAAE/EBq+BpzYTh+d4mQtJr2xiDBSUfG2Xx5EFU7cWLBOCaf/2Q==","aspectRatio":1.5151515151515151,"src":"/static/93c845a8821b032557d4fef97962169e/0cb3d/capa.jpg","srcSet":"/static/93c845a8821b032557d4fef97962169e/f836f/capa.jpg 200w,\n/static/93c845a8821b032557d4fef97962169e/2244e/capa.jpg 400w,\n/static/93c845a8821b032557d4fef97962169e/0cb3d/capa.jpg 536w","sizes":"(max-width: 536px) 100vw, 536px"}}},"tags":["Intermediário","Avançado","Aplicações"],"author":["Matheus"],"suburl":"token-erc20/","publishedAt":"04/06/2022","modifiedAt":"20220604"},"tableOfContents":{"items":[{"url":"#token-erc20","title":"Token ERC20"},{"url":"#criando-seu-próprio-token-erc20","title":"Criando seu próprio token ERC20"},{"url":"#contrato-para-trocar-tokens-swap-de-tokens","title":"Contrato para trocar tokens (Swap de Tokens)","items":[{"url":"#testar-no-remix","title":"Testar no Remix"}]}]},"timeToRead":1},"allMdx":{"nodes":[{"frontmatter":{"suburl":"sistema-de-swap-estavel-amm/","title":"Como criar um sistema de Swap estável AMM","tags":["Avançado","DeFi"]}},{"frontmatter":{"suburl":"produto-constante-amm/","title":"Como criar um produto constante AMM","tags":["Intermediário","DeFi"]}},{"frontmatter":{"suburl":"soma-constante-amm/","title":"Como criar uma soma constante AMM","tags":["Intermediário","DeFi"]}},{"frontmatter":{"suburl":"sistema-de-cofre/","title":"Como criar um sistema de Cofre","tags":["Intermediário","DeFi"]}},{"frontmatter":{"suburl":"sistema-de-staking/","title":"Como criar um sistema de Staking de Recompensas","tags":["Intermediário","Avançado","DeFi"]}},{"frontmatter":{"suburl":"sistema-de-preco-chainlink-oracle/","title":"Como criar um sistema de preços Oracle","tags":["Intermediário","Avançado","DeFi"]}},{"frontmatter":{"suburl":"exemplos-de-uso-do-uniswap-v3/","title":"Exemplos de uso do Uniswap V3","tags":["Intermediário","Avançado","DeFi"]}},{"frontmatter":{"suburl":"fornecimento-unilateral-com-uniswap-v2/","title":"Fornecimento unilateral ideal com Uniswap V2","tags":["Intermediário","Avançado","DeFi"]}},{"frontmatter":{"suburl":"adicionar-e-remover-liquidez-com-uniswap-v2/","title":"Como adicionar e remover liquidez com Uniswap V2","tags":["Intermediário","Avançado","DeFi"]}},{"frontmatter":{"suburl":"swap-com-uniswap-v2/","title":"Como realizar Swap com Uniswap V2","tags":["Intermediário","DeFi"]}},{"frontmatter":{"suburl":"testes-com-echidna/","title":"Como realizar testes com Echidna","tags":["Intermediário"]}},{"frontmatter":{"suburl":"ignorar-verificacao-do-tamanho-do-contrato/","title":"Como ignorar a verificação do tamanho do contrato","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"repeticao-de-assinatura/","title":"Repetição de assinatura","tags":["Avançado","Hacks"]}},{"frontmatter":{"suburl":"manipular-timestamp-do-bloco/","title":"Manipulando o timestamp do bloco na blockchain","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"ataque-front-running/","title":"Ataque utilizando a técnica front running","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"honeypot/","title":"Criar uma armadilha para hackers com a técnica honeypot","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"ocultar-script-malicioso/","title":"Como um contrato malicioso esconde seu script","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"phishing-com-txorigin/","title":"Phishing com tx.origin","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"negacao-de-servico/","title":"Inutilizar um contrato através da negação de serviço","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"fonte-de-aleatoriedade/","title":"Fonte de Aleatoriedade","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"chamada-de-funcao-delegatecall/","title":"Chamada de função delegatecall","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"acessando-variaveis-privadas/","title":"Acessando variáveis privadas","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"auto-destruicao/","title":"Ataques com Auto-destruição","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"estouro-de-memoria/","title":"Ataques com estouro de memória","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"ataque-de-reentrada/","title":"Ataque de reentrada, aprenda como funciona e como evitar","tags":["Intermediário","Hacks"]}},{"frontmatter":{"suburl":"bloqueio-de-tempo-timelock/","title":"Criar um contrato com bloqueio de tempo","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"contrato-para-multichamadas/","title":"Criar contrato para Multichamada de funções","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"financiamento-coletivo-crowd-fund/","title":"Criar um sistema de financiamento coletivo","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"sistema-de-leilao-ingles-holandes/","title":"Criar um sistema de leilão inglês e holandês","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"canal-de-pagamento-bidirecional/","title":"Criar um Canal de pagamento bidirecional","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"canal-de-pagamento-unidirecional/","title":"Criar um Canal de pagamento unidirecional","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"gravar-dados-no-slot/","title":"Como gravar dados em qualquer slot","tags":["Intermediário","Aplicações"]}},{"frontmatter":{"suburl":"implantar-contrato-com-proxy/","title":"Como implantar qualquer contrato com Proxy","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"trabalhando-com-proxy/","title":"Trabalhando com Proxy","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"precomputar-endereco-contrato/","title":"Pré-computar endereço do Contrato com Create2","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"token-erc721/","title":"Criando nosso primeiro Token ERC721","tags":["Intermediário","Avançado","Aplicações"]}},{"frontmatter":{"suburl":"token-erc20/","title":"Criando nosso primeiro Token ERC20","tags":["Intermediário","Avançado","Aplicações"]}},{"frontmatter":{"suburl":"aplicacao-mapeamento-iteravel/","title":"Mapeamento Iterável","tags":["Intermediário","Aplicações"]}},{"frontmatter":{"suburl":"aplicacao-arvore-merkle/","title":"Árvore de Merkle","tags":["Avançado","Aplicações"]}},{"frontmatter":{"suburl":"aplicacao-multi-assinatura/","title":"Carteira com Multi-Assinaturas","tags":["Intermediário","Avançado","Aplicações"]}},{"frontmatter":{"suburl":"aplicacao-wallet/","title":"Carteira de Tokens","tags":["Iniciante","Aplicações"]}},{"frontmatter":{"suburl":"assinaturas-e-hashing-keccak/","title":"Verificando assinatura hashing com Keccak256","tags":["Intermediário","Avançado"]}},{"frontmatter":{"suburl":"abi/","title":"O que é ABI e para que serve?","tags":["Iniciante"]}},{"frontmatter":{"suburl":"import-e-libraries/","title":"Import e Libraries, para que servem?","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"criar-contrato-simples/","title":"Criar um contrato através de outro contrato","tags":["Intermediário"]}},{"frontmatter":{"suburl":"call-fallback-delegatecall/","title":"Call, Fallback, Delegatecall e chamadas de contratos","tags":["Intermediário"]}},{"frontmatter":{"suburl":"transfer-send-call/","title":"Enviar Ether com transfer, send e call","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"visibilidade-interface-pagavel/","title":"Visibilidade, Interfaces e Funções Pagáveis","tags":["Intermediário"]}},{"frontmatter":{"suburl":"evento-construtor-heranca/","title":"Evento, Construtor e Herança","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"tratamento-de-erros/","title":"Tratamento de erros de condições e exceções","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"funcoes/","title":"Funções e Modificadores","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"armazenamento/","title":"Armazenamento de Dados","tags":["Intermediário"]}},{"frontmatter":{"suburl":"estruturas/","title":"Estruturas - Struct","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"enum/","title":"Enum - Enumeradores","tags":["Iniciante","Intermediário"]}},{"frontmatter":{"suburl":"mapping-arrays/","title":"Mapping e Arrays","tags":["Iniciante"]}},{"frontmatter":{"suburl":"if-else-for-while/","title":"If, Else, For e While","tags":["Iniciante"]}},{"frontmatter":{"suburl":"ether-wei-gas/","title":"Ether, Wei e Taxa de Gas","tags":["Iniciante"]}},{"frontmatter":{"suburl":"variaveis/","title":"Entendendo as Variáveis","tags":["Iniciante"]}},{"frontmatter":{"suburl":"primeiro-aplicativo/","title":"Meu primeiro aplicativo","tags":["Iniciante","Aplicações"]}}]},"topicsYaml":{"topics":[{"desc":"Todos os conteúdos de nível iniciante estão disponíveis aqui","title":"Iniciante","url":"iniciante/"},{"desc":"Todos os conteúdos de nível intermediário estão disponíveis aqui","title":"Intermediário","url":"intermediario/"},{"desc":"Todos os conteúdos de nível avançado estão disponíveis aqui","title":"Avançado","url":"avancado/"},{"desc":"Todos os artigos referentes a exemplos de aplicações do Solidity, estão disponíveis aqui","title":"Aplicações","url":"aplicacoes/"},{"desc":"Todos os artigos referentes a exemplos de aplicação de hacks do Solidity, estão disponíveis aqui","title":"Hacks","url":"hacks/"},{"desc":"Todos os artigos referentes a exemplos de aplicação DeFi do Solidity, estão disponíveis aqui","title":"DeFi","url":"defi/"},{"desc":"Artigos de outras linguagens de programação, exemplos de interação entre a blockchain e aplicativos externos, estão disponíveis aqui","title":"Outros Artigos","url":"artigos/"}]}},"pageContext":{"suburl":"token-erc20/","postTopics":["Intermediário","Avançado","Aplicações"],"publishedAt":"04/06/2022","prevArticle":{"title":"Mapeamento Iterável","layout":"BlogPage","suburl":"aplicacao-mapeamento-iteravel/","author":["Matheus"],"tags":["Intermediário","Aplicações"],"publishedAt":"02/06/2022","modifiedAt":"20220602"},"nextArticle":{"title":"Criando nosso primeiro Token ERC721","layout":"BlogPage","suburl":"token-erc721/","author":["Matheus"],"tags":["Intermediário","Avançado","Aplicações"],"publishedAt":"05/06/2022","modifiedAt":"20220605"}}},"staticQueryHashes":["119291576","2330562257","4065828390"]}